perm filename LCSUBR.F4[IRC,LCS] blob sn#404797 filedate 1978-12-15 generic text, type T, neo UTF8
C*****  THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS

	SUBROUTINE SUBR
	COMMON /P/P(1) /PL/PL(1) /INS/ INST(27),BG(60)
	COMMON INUM,IPAR,CNT(27),BT,IREST,DF,DUR(27)
C   INUM=INST#  IPAR=PARAM#  
C   BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C   IF IREST IS <0, THAT NOTE WILL BE A REST.  
C   INST=INST. NAME,  BG=INSTS' BEGIN TIMES.
C   NOTE #S IN SUBROUTINE: (1-84)  C4=37  FS4=43  C5=49  ETC.
C   F1=86  F15=100 (NO F16!)

C   CALL SUBROUTINE FROM ANY PARAMETER WHERE THE CALLING PARAMETER
C   AND THE IMMEDITELY PRECEDING PARAMETER ARE UNUSED BY YOUR INSTR.
C   P3 CAN BE NOTES OR NUMBS.

	X=P(3)
	IF(PL(3).EQ.1)GO TO 1
	X=IFIX(X)
C  FOR RAND NOTES TO LOCK ON NOTE NUMBERS.
CC	X=30.8677*2**(X/12)
	X=15.43385*2**(X/12)
C  X=FREQ. IN HZ. BASED ON NOTE # IN P3.  NUMB. ABOVE IS B, OCT↓ LOWEST B.

	PL(3)=1.
C  THIS CAUSES FREQ. NUM TO PRINT INSTEAD OF LITERAL CHARACTERS.

1	Y=IFIX(P(IPAR-1))
	Z=IFIX(P(IPAR))
	P(3)=X*2**(Y/Z)
2	IF(X.EQ.0)IREST=-1

C  IPAR (Z) IS THE CALLING PARAMETER.  IPAR-1 (Y) THE PREVIOUS PARAM.
C  THE NUMBER IN P(IPAR)=# OF DIVISIONS OF THE OCTAVE.  
C  THE NUMBER IN P(IPAR-1)=CHROMATIC STEP IN THAT DIV.
	RETURN
	END

C        TYPICAL INPUT FOR MICROTONE SUBROUTINE.
C   TOOT  ; P2 .3; P3 A3;  
C   P4 .7; 
C   P5 F2;  P6 F4;
C   P18 NUM/0/1/2/3/4/5/6/7/8/9/FINE;
C   P19 9 SUBR; END;  OCTAVE IS DIVIDED INTO 9 PARTS.
C       < ASSUMES P18 AND P19 ARE NOT USED BY YOUR INSTRUMENT.